const { DataTypes } = require('sequelize');
const { sequelize } = require('../library/sequelize');

// 定义role模型
const role = sequelize.define('ly_role', {
    role_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        primaryKey: true,
        autoIncrement: true,
        comment: '角色表：角色ID'
    },
    identify_code: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '唯一标识'
    },
    role_level: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '角色权限等级 0~255 255只有一个超级管理员 其他管理员不能有255'
    },
    name_en: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        unique: true,
        comment: '角色英文名'
    },
    name_cn: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '角色中文名'
    },
    icon_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '角色图标id,优先于url'
    },
    icon_url: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '图标链接'
    },
    parent_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '父类角色id'
    },
    group_name: {
        type: DataTypes.STRING(255),
        allowNull: false,
        comment: '分组名称'
    },
    is_delete: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否删除'
    },
    is_formal: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否正式'
    },
    create_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '创建时间'
    },
    update_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '更新时间'
    }
}, {
    tableName: 'ly_role',
    timestamps: false,
    comment: '角色表'
});

// 模型初始化
async function initModel() {
    try {
        await role.sync({ alter: false }); // 不自动修改表结构
        console.log('✅ Role模型初始化成功');
        return true;
    } catch (error) {
        console.error('❌ Role模型初始化失败:', error);
        return false;
    }
}

// 工具方法：获取当前时间戳
function getCurrentTimestamp() {
    return Math.floor(Date.now() / 1000);
}

// 工具方法：创建角色时的默认值处理
function getCreateDefaults() {
    const now = getCurrentTimestamp();
    return {
        create_time: now,
        update_time: now,
        is_delete: 0,
        is_formal: 0
    };
}

// 工具方法：更新角色时的时间戳处理
function getUpdateDefaults() {
    return {
        update_time: getCurrentTimestamp()
    };
}

module.exports = {
    roleModel: role,
    initModel,
    getCurrentTimestamp,
    getCreateDefaults,
    getUpdateDefaults
};